package com.xxjh.brs.uavmodeling.controller;

import com.xxjh.brs.ftp.common.api.enums.ResponseStatus;
import com.xxjh.brs.ftp.common.exceptions.ConditionException;
import com.xxjh.brs.sftp.vo.FileVo;
import com.xxjh.brs.sftp.vo.FloderVo;
import com.xxjh.brs.scheduler.FtpTransferDynamicScheduledService;
import com.xxjh.brs.uavmodeling.service.UavModelingService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author CHENCHEN
 * @title 无人机扫描建模3dTiles
 * @company 新兴际华科技（天津）有限公司
 * @create 2024-06-19 17:22
 */
@Slf4j
@Api(value = "无人机3d建模")
@RestController
public class UacModeFtpController {

    @Autowired
    private FtpTransferDynamicScheduledService dynamicScheduledService;

    @Autowired
    private UavModelingService uavModelingService;

    /**
     * 开启无人机建模，通过任务ID和目录开启定时任务，防止重复开启。
     * 定时任务通过FTP服务器拉取3DTiles文件。
     *
     * @param mapId 地图ID。
     * @return
     */
    @ApiOperation(value = "开启无人机建模", notes = "传入当前任务的地图ID")
    @ApiResponse(code = 200, message = "成功")
    @GetMapping("/startModeling")
    public void startModeling(
            @ApiParam(name = "mapId", required = true) String mapId,
            @ApiParam(name = "taskId", required = true) String taskId) {
        if (mapId == null) {
            throw new ConditionException(ResponseStatus.BAD_REQUEST);
        }
        dynamicScheduledService.startTask(mapId, taskId);
    }

    /**
     * 停止任务并删除已存在的指定地图无人机建模3d地图
     *
     * @param mapId 开始搜索的可选子目录名称。
     * @return CommonResponse。
     */
    @ApiOperation(value = "停止无人机建模并删除文件", notes = "传入当前任务的地图ID")
    @ApiResponse(code = 200, message = "成功")
    @GetMapping("/stopModeling")
    public void stopModeling(@ApiParam(name = "mapId", required = true) String mapId) {
        if (mapId == null) {
            throw new ConditionException(ResponseStatus.BAD_REQUEST);
        }
        dynamicScheduledService.stopModeling(mapId);
    }

    /**
     * 获取所有已存在的无人机建模3d地图文件名称
     *
     * @return 所有无人机建模文件名集合。
     */
    @ApiOperation(value = "获取所有任务文件名称")
    @ApiResponse(code = 200, message = "成功", response = FloderVo.class)
    @GetMapping("/getAllDirectory")
    public List<FloderVo> getAllDirectory() {
        return uavModelingService.getAllDirectory();
    }

    /**
     * 查找任务中获取3DTiles地图文件
     *
     * @param mapId 开始搜索的可选子目录名称。
     * @return 所有无人机建模文件json地址。
     */
    @ApiOperation(value = "查看当前任务建模文件", notes = "传入当前任务的地图ID")
    @ApiResponse(code = 200, message = "成功", response = FileVo.class)
    @GetMapping("/getTilesJson")
    public List<FileVo> getStartingTiles(@ApiParam(name = "mapId", required = true) String mapId) {
        if (mapId == null) {
            throw new ConditionException(ResponseStatus.BAD_REQUEST);
        }
        return uavModelingService.getStartingTilesByMapId(mapId);
    }

    /**
     * 进入页面后直接加载全部3dTilesjson路径
     *
     * @return 所有无人机建模文件json地址。
     */
    @ApiOperation(value = "加载全部建模文件")
    @ApiResponse(code = 200, message = "成功", response = FileVo.class)
    @GetMapping("/get3dTiles")
    public List<FileVo> get3dTiles() {
        return uavModelingService.getAllTiles();
    }
}
